#include "sdl_ptr.h"
#include "sdl_singleton.h"
#include "sdl_engine.h"

#include <iostream>
using namespace std;

class sdl_nonprim:public sdl_prim {
public:
	sdl_nonprim(const std::string & a):sdl_prim(a) {}
};

int main(int argc,char**argv){
	// żeby zapobiec błędom przy nieprawidłowym przypisaniu, taki kod spowoduje albo błąd kompilacji albo wyrzucenie wyjątku
	// sdl_nonprim p_c("inny obiekt");
	// sdl_ptr<sdl_nonprim>	e(&p_c) ;
	
	
	sdl_ptr<sdl_prim>	a (new sdl_prim("moj obiekt"));
	sdl_ptr<sdl_prim>	b = a;
	sdl_ptr<sdl_prim>	c = b;
	sdl_ptr<sdl_prim>	d = c;

	sdl_ptr<sdl_prim>	nul;
	if(c)
		cout << "dobry wskaźnik" << endl;
	if(c)
		cout << "dobry wskaźnik" << endl;
	if(!nul)
		cout << "zły wskaźnik" << endl;


	sdl_ptr<sdl_engine>	engine_p (sdl_engine::__give());
	

	cout << "mamy " << a->name() << endl;
	cout << "mamy " << b->name() << endl;
	
	sdl_ptr<sdl_prim>	f ;
	f=b;
	a=f;
	f=c;
	f=a;
	b=c;
	return 0;
}
